package com.example.demo.service;

import com.example.demo.dto.DataSourceConfigDTO;
import com.example.demo.dto.QueryResultDTO;
import com.example.demo.entity.DataSourceConfig;
import com.example.demo.request.CreateDataSourceConfigRequest;
import com.example.demo.request.ExecuteQueryRequest;
import com.example.demo.request.ExecuteQueryWithParamsRequest;
import com.example.demo.request.TestConnectionRequest;
import java.util.List;

public interface DataSourceConfigService {

    /**
     * 分页查询数据源配置列表
     */
    List<DataSourceConfigDTO> getDataSourceConfigs(int page, int size);

    /**
     * 获取数据源配置总数
     */
    long countDataSourceConfigs();

    /**
     * 根据 ID 查询数据源配置详情
     */
    DataSourceConfigDTO getDataSourceConfigById(Long id);

    /**
     * 根据名称查询数据源配置
     */
    DataSourceConfigDTO getDataSourceConfigByName(String name);

    /**
     * 创建新数据源配置
     */
    DataSourceConfig createDataSourceConfig(CreateDataSourceConfigRequest request);

    /**
     * 更新数据源配置
     */
    void updateDataSourceConfig(Long id, CreateDataSourceConfigRequest request);

    /**
     * 删除数据源配置
     */
    void deleteDataSourceConfig(Long id);

    /**
     * 根据状态查询数据源配置
     */
    List<DataSourceConfigDTO> getDataSourceConfigsByStatus(Integer status);

    /**
     * 根据状态查询数据源配置（分页）
     */
    List<DataSourceConfigDTO> getDataSourceConfigsByStatus(Integer status, int page, int size);

    /**
     * 根据状态统计数据源配置数量
     */
    long countDataSourceConfigsByStatus(Integer status);

    /**
     * 根据数据库类型查询数据源配置
     */
    List<DataSourceConfigDTO> getDataSourceConfigsByDbType(String dbType);

    /**
     * 根据数据库类型查询数据源配置（分页）
     */
    List<DataSourceConfigDTO> getDataSourceConfigsByDbType(String dbType, int page, int size);

    /**
     * 根据数据库类型统计数据源配置数量
     */
    long countDataSourceConfigsByDbType(String dbType);

    /**
     * 测试数据源连接
     */
    boolean testConnection(Long id);

    /**
     * 使用参数测试数据源连接（不需要保存配置）
     */
    boolean testConnectionWithParams(TestConnectionRequest request);

    /**
     * 启用/禁用数据源配置
     */
    void updateStatus(Long id, Integer status);

    /**
     * 在指定数据源上执行SQL查询
     */
    QueryResultDTO executeQuery(Long id, ExecuteQueryRequest request);

    /**
     * 使用参数执行SQL查询（不需要保存配置）
     */
    QueryResultDTO executeQueryWithParams(ExecuteQueryWithParamsRequest request);

    /**
     * 获取指定数据源的表字段信息和前五条数据
     */
    QueryResultDTO getTableInfoAndSampleData(Long id, String tableName);

    /**
     * 使用参数获取表字段信息和前五条数据（不需要保存配置）
     */
    QueryResultDTO getTableInfoAndSampleDataWithParams(TestConnectionRequest connectionRequest, String tableName);
}